package main

import "fmt"

//不关心这些捕获了的变量和常量是否已经超出了作用域
// 所以只有闭包还在使用它，这些变量就还会存在

func squares() func() int {
	var x int
	return func() int {
		x++					//变量的生命周期不由它的作用域决定：squares 返回后，变量 x 仍然隐式的存在于 f 中
		return x * x
	}
}

func main () {
	f := squares()
	fmt.Println(f())
	fmt.Println(f())
	fmt.Println(f())
	fmt.Println(f())
}
